package top.xia17.plugins.fast.common.security.token.provider;

import org.springframework.security.core.Authentication;
import top.xia17.plugins.fast.common.security.base.LoginInfo;

/**
 * token提供
 * @author xia17
 * @date 2021/11/24
 */
public interface TokenProvider {


    /**
     * 使用Token来获取认证信息
     * @param token token
     * @return /
     */
    Authentication getAuthentication(String token);

    /**
     * 生成token
     * @param loginInfo token携带的信息
     * @return 返回token
     */
    String generateToken(LoginInfo loginInfo);

    /**
     * 生成token并存储
     * @param loginInfo /
     * @return 返回token
     */
    String generateTokenAndSave(LoginInfo loginInfo);

    /**
     * 检查Token 是否需要续期
     * @param token 需要检查的token
     */
    void checkRenewal(String token);

    /**
     * 保存token信息
     * @param token token
     * @param loginInfo 认证信息
     */
    void addToken(String token, LoginInfo loginInfo);


    /**
     * 移除Token
     * @param token /
     */
    void removeToken(String token);

    /**
     * 更新token信息
     * @param token token
     * @param loginInfo 信息
     */
    void updateTokenInfo(String token, LoginInfo loginInfo);

}
